package com.tjetc._1lambda;

import java.util.Arrays;
import java.util.Comparator;

public class _1Lambda {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(1);
            }
        }).start();

        System.out.println("main");

        // 使用lambda
        new Thread(() -> {
            System.out.println(2);
        }).start();


        /*
            1.首先使用lambda表达式用来函数式接口
             （1）被@FunctionalInterface修饰的 用来校验的和override作用一致
              （2）接口只允许一个方法
            2. 如果只有一个参数 可以省略（）如果方法体只有一行代码 可以省略{}
            3. 参数类型可以省略


         */

        f1(a -> {
            System.out.println(3);
        });

        f1(a -> System.out.println(3));


        f2((a, b) -> 1);

        f2(new B() {
            @Override
            public int f(int a, int b) {
                return 1;
            }
        });

        Integer[] nums = {1, 3, 2};
        Arrays.sort(nums, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
    }

    public static void f1(A a) {
        a.f(1);
    }

    public static void f2(B b) {
        System.out.println("b.f(1, 2) = " + b.f(1, 2));
    }

}

@FunctionalInterface
interface A {
    void f(int a);
//    void f1();
}

interface B {
    int f(int a, int b);
}
